﻿using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

namespace HttpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主线程测试开始..");
            AsyncMethod();
            // 同步延迟，只能在同步方法中使用，实质是线程休眠
            Thread.Sleep(1000);
            Console.WriteLine("主线程测试结束..");
            // 如果没有这一步，主方法执行完直接退出程序了，异步方法就没法执行完毕
            Console.ReadLine();
        }

        static async void AsyncMethod()
        {
            Console.WriteLine("开始异步代码");
            var result = await MyMethod();
            Console.WriteLine("异步代码执行完毕");
        }

        static async Task<string> MyMethod()
        {
            string result = string.Empty;

            for (int i = 0; i < 5; i++)
            {
                try
                {
                    using (HttpClient client = new HttpClient())
                    {
                        // 超时时间
                        client.Timeout = TimeSpan.FromSeconds(10);
                        // 异步查询
                        HttpResponseMessage response = await client.GetAsync("http://193.168.1.201:9300/pressOrder/list").ConfigureAwait(false);
                        // 返回查询结果
                        result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                        Console.WriteLine($"第{i+1}次访问，{result}");
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"访问出错，{e.Message}");
                    return result;
                }
                // 异步延迟，只能在异步方法中使用，实质是创建了一个给定时间的任务，源码是一个包装在任务里的定时器
                await Task.Delay(1000); //模拟耗时操作
            }

            return result;
        }
    }
}
